package jms;

import java.io.Console;
import java.io.StringReader;
import java.util.Calendar;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.EJB;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;

import org.jboss.logging.Logger;

import services.AdministrarDespacho;
import xml.ArticuloXML;

import exceptions.EntityAlreadyExistException;


/**
 * Message-Driven Bean implementation class for: recibirArticulo
 */
@MessageDriven(
		activationConfig = {
				@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
				@ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/nuevosArticulos") }, mappedName = "queue/nuevosArticulos")
public class RecibirArticulo implements MessageListener {

    /**
     * Default constructor. 
     */
	@EJB
	private AdministrarDespacho adminDespacho;
	
    public RecibirArticulo() {
        // TODO Auto-generated constructor stub
    }
	
	/**
     * @see MessageListener#onMessage(Message)
     */
    public void onMessage(Message message) {
        // TODO Auto-generated method stub
    	TextMessage nuevoArticulo = (TextMessage) message;
    	String nuevoArticuloXML;
    	Logger logger = Logger.getLogger(RecibirArticulo.class);

    	
    	try {
    		nuevoArticuloXML = nuevoArticulo.getText();
			JAXBContext jc = JAXBContext.newInstance(ArticuloXML.class);
			javax.xml.bind.Unmarshaller u = jc.createUnmarshaller();
			StringReader reader = new StringReader(nuevoArticuloXML);
			ArticuloXML articulo = (ArticuloXML)u.unmarshal(reader);
			adminDespacho.CargarArticulo(articulo.getCodigo(),articulo.getNombre(), articulo.getIdModulo());
			System.out.println("Se cargo el articulo : " + articulo.getCodigo());
		} catch (JMSException | EntityAlreadyExistException | JAXBException e) {
			logger.error("Error al crear un nuevo articulo en la fecha " + Calendar.getInstance().getTime().toString());
			e.printStackTrace();
		}
    }

}
